package com.core.cloudcommon.trace;

import java.lang.annotation.*;

/**
 * @author =====Lqj=====
 * @className Traceable
 * @description 链路追踪注解
 * @create 2024/12/17 10:30
 **/
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Traceable {

    /**
     * 操作名称
     */
    String operation() default "";

    /**
     * 操作描述
     */
    String description() default "";

    /**
     * 是否记录参数
     */
    boolean logParams() default true;

    /**
     * 是否记录返回值
     */
    boolean logResult() default true;

    /**
     * 是否记录执行时间
     */
    boolean logElapsedTime() default true;

    /**
     * 慢操作阈值（毫秒），超过此时间会记录警告日志
     */
    long slowThreshold() default 1000;

    /**
     * 日志级别
     */
    LogLevel level() default LogLevel.INFO;

    /**
     * 日志级别枚举
     */
    enum LogLevel {
        DEBUG, INFO, WARN, ERROR
    }
}
